package Z003CaoZuoFu;

public class WeiCZF {

    public static void main(String[] args) {
        int i = 5 ;
        String b = (Integer.toBinaryString(i));
        System.out.println(i + "的二进制表达是：" + b);


        int a1 = 5 ;
        int b1 = 6 ;
        System.out.println(Integer.toBinaryString(a1));
        System.out.println(Integer.toBinaryString(b1));
        System.out.println(a1|b1);


        int a2 = 5 ;
        int b2 = 6 ;
        System.out.println(Integer.toBinaryString(a2));
        System.out.println(Integer.toBinaryString(b2));
        System.out.println(a2&b2);


        int a3 = 5 ;
        int b3 = 6 ;
        /**
         * 一些特别情况：
         * 任何数和自己进行异或 都等于 0
         * 任何数和0 进行异或 都等于自己
         */
        System.out.println(Integer.toBinaryString(a3));
        System.out.println(Integer.toBinaryString(b3));
        System.out.println(a3^b3);
        System.out.println(a3^0);
        System.out.println(a3^a3);


        byte a4 = 5 ;
        System.out.println(Integer.toBinaryString(a4));
        System.out.println(~a4);


        byte a5 = 6 ;
        System.out.println(Integer.toBinaryString(a5));
        System.out.println(a5 << 1);
        System.out.println(a5 >> 1);

        // lianxi 不用乘法符号计算 2 * 16

        /**
         * 带符号右移 >>
         * 对于正数， 带符号右移 >> 会把所有的位右移，并在最前面补0
         * 对于负数， 带符号右移 >> 会把所有的位右移，并在最前面补1
         * 无符号右移>>>
         * 如果是一个负数，那么对应的二进制的第一位是1
         * 无符号右移>>>会把第一位的1也向右移动，导致移动后，第一位变成0
         * 这样就会使得负数在无符号右移后，得到一个正数
         *
         * 简单的说：
         * 带符号右移 >> 移动后正的还是正的，负的还是负的,符号不变
         * 无符号右移>>>移动后，变正的了
         */

        int a6 = -10;
        System.out.println(Integer.toBinaryString(a6));

        int a7 = a6>>1;
        System.out.println(Integer.toBinaryString(a7));
        System.out.println(a7);

        int k = a6>>>1;
        System.out.println(Integer.toBinaryString(k));
        System.out.println(k);

        int r1 = 3 ;
        int r2 = 2 ;
        int r3 = ((r1 | r2) ^ (r1 & r2) << 2 >>>1);

    }
}
